/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tlp.ucsur.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import tlp.ucsur.beans.UsuarioBean;
import tlp.ucsur.conexion.DBConnection;
import java.util.ArrayList;
import java.util.List;
import tlp.ucsur.beans.TipoUsuarioBean;

/**
 *
 * @author Administrador
 */
public class MySqlUsuarioDAOImpl implements UsuarioDAO {

  @Override
  public UsuarioBean getUsuario(String codigoUsuario) {
    String sql = "select * from usuario where codUsuario = ?";
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, codigoUsuario);
      ResultSet rs = ps.executeQuery();
      if (rs.next()) {
        UsuarioBean usuario = new UsuarioBean();
        TipoUsuarioBean tipo_usuario = new TipoUsuarioBean();
        tipo_usuario.setCodigoTUsuario(rs.getInt("codTUsuario"));
        usuario.setTipoUsuario(tipo_usuario);
        usuario.setCodigoUsuario(rs.getString("codUsuario"));
        usuario.setNombreUsuario(rs.getString("nombreUsuario"));
        usuario.setApellidoPaterno(rs.getString("apellidoPaterno"));
        usuario.setApellidoMaterno(rs.getString("apellidoMaterno"));
        usuario.setTipoDocumento(rs.getString("tipoDocumento"));
        usuario.setNumeroDocumento(rs.getString("numeroDoc"));
        usuario.setEmailUsuario(rs.getString("emailUsuario"));
        usuario.setTelefonoUsuario(rs.getString("telefonoUsuario"));
        usuario.setDireccionUsuario(rs.getString("direccionUsuario"));
        usuario.setPassword(rs.getString("password"));
        return usuario;
      }
      rs.close();
      ps.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  @Override
  public List<UsuarioBean> getListaUsuariosPorFiltros(String nombreTUsuario, String tipoDocumento) {

    List<UsuarioBean> lista_usuario = new ArrayList<UsuarioBean>();
    String sql = "SELECT usuario.codUsuario,usuario.nombreUsuario,usuario.apellidoPaterno,usuario.apellidoMaterno,usuario.numeroDoc,usuario.emailUsuario,usuario.telefonoUsuario,usuario.direccionUsuario"
            + " FROM usuario,tipousuario "
            + "where usuario.codTUsuario= tipousuario.idtipoUsuario and tipousuario.nombreTUsuario=? and usuario.tipoDocumento=?";
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, nombreTUsuario);
      ps.setString(2, tipoDocumento);
      ResultSet rs = ps.executeQuery(sql);
      while (rs.next()) {
        UsuarioBean usuario = new UsuarioBean();
        usuario.setCodigoUsuario(rs.getString("codUsuario"));
        usuario.setNombreUsuario(rs.getString("nombreUsuario"));
        usuario.setApellidoPaterno(rs.getString("apellidoPaterno"));
        usuario.setApellidoMaterno(rs.getString("apellidoMaterno"));
        usuario.setNumeroDocumento(rs.getString("numeroDoc"));
        usuario.setEmailUsuario(rs.getString("emailUsuario"));
        usuario.setTelefonoUsuario(rs.getString("telefonoUsuario"));
        usuario.setDireccionUsuario(rs.getString("direccionUsuario"));

        lista_usuario.add(usuario);
      }
      rs.close();
      ps.close();
      conn.close();
      return lista_usuario;
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  @Override
  public void insertar(UsuarioBean usuario) {

    TipoUsuarioBean tipo_usuario = new TipoUsuarioBean();
    tipo_usuario = usuario.getTipoUsuario();
    String sql = "insert into usuario (codTUsuario,codUsuario,nombreUsuario,apellidoPaterno,apellidoMaterno,tipoDocumento,numeroDoc,"
            + "emailUsuario,telefonoUsuario,direccionUsuario,password)"
            + "values(?,?,?,?,?,?,?,?,?,?,?)";

    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setInt(1, tipo_usuario.getCodigoTUsuario());
      ps.setString(2, usuario.getCodigoUsuario());
      ps.setString(3, usuario.getNombreUsuario());
      ps.setString(4, usuario.getApellidoPaterno());
      ps.setString(5, usuario.getApellidoMaterno());
      ps.setString(6, usuario.getTipoDocumento());
      ps.setString(7, usuario.getNumeroDocumento());
      ps.setString(8, usuario.getEmailUsuario());
      ps.setString(9, usuario.getTelefonoUsuario());
      ps.setString(10, usuario.getDireccionUsuario());
      ps.setString(11, usuario.getPassword());

      ps.executeUpdate();

      ps.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  @Override
  public void eliminar(String codigoUsuario) {
    String sql = "delete from usuario where codUsuario=?";
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, codigoUsuario);
      ps.executeUpdate();

      ps.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }

  }

  @Override
  public void actualizar(UsuarioBean usuario) {

    TipoUsuarioBean tipo_usuario = new TipoUsuarioBean();
    tipo_usuario = usuario.getTipoUsuario();

    String sql = "update  usuario set codTUsuario=?,nombreUsuario=?,apellidoPaterno=?,apellidoMaterno=?,tipoDocumento,numeroDoc=?,"
            + "emailUsuario=?,telefonoUsuario=?,direccionUsuario=?,password=? where codUsuario=?";
    try {

      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);


      ps.setString(1, usuario.getCodigoUsuario());
      ps.setString(2, usuario.getNombreUsuario());
      ps.setString(3, usuario.getApellidoPaterno());
      ps.setString(4, usuario.getApellidoMaterno());
      ps.setString(5, usuario.getTipoDocumento());
      ps.setString(6, usuario.getNumeroDocumento());
      ps.setString(7, usuario.getEmailUsuario());
      ps.setString(8, usuario.getTelefonoUsuario());
      ps.setString(9, usuario.getDireccionUsuario());
      ps.setString(10, usuario.getPassword());
      ps.setInt(11, tipo_usuario.getCodigoTUsuario());
      ps.executeUpdate();

      ps.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }


  }
}
